import java.util.PriorityQueue;

class KthLargest {

    public static int k;
    public static PriorityQueue<Integer> heap;

    public KthLargest(int _k, int[] nums) {
        /**
         * 初始化函数
         * 基本思路：
         *  使用小根堆维护最大的k个元素，无需判断直接入队，判断堆容量是否超过k，若是超过则出队栈顶元素*/
        k = _k;
        heap = new PriorityQueue<>();
        for(int e: nums) {
            heap.offer(e);
            if(heap.size() > k) {
                heap.poll();
            }
        }
    }
    
    public int add(int val) {
        /**
         * 优先级队列解决Top k问题*/
        heap.offer(val);
        if(heap.size() > k) {
            heap.poll();
        }
        return heap.peek();
    }
}
